/**
 * 但回调只适用于简单的异步场景！
 * 当程序中有很多回调时，代码会变得非常复杂，而且调试也会很麻烦，
 * 因此在ES2015标准中新增了Promise特性，用来帮助处理异步代码而不涉及使用回调。
 * 在更高级的ES2017标准中，又新增了async/await语法，使得异步编程更加简单。
 * 更详细的内容可以参考：
 * https://segmentfault.com/a/1190000044032778?decode__1660=YqGxBDuii%3D0%3DeGIPGNReeTThQqitzHdD97GoD
 */

async function fetchDataFromApi() {
    const res = await fetch('https://v2.jokeapi.dev/joke/Programming?type=single');
    const json = await res.json();
    console.log(json);
  }
  //报错 await is only valid in async functions and the top level bodies of modules
  // 报错原因：
  // 1. async/await 只能在 async 函数中使用
  // 2. async/await 只能在模块的顶层使用，不能在函数内部使用 
  //解决办法：
  // 1. 将 async/await 函数封装成一个 async 函数，然后在该函数中调用
  // 2. 或者将文件命名为.mjs 后缀，这样就可以在文件内部使用 async/await 了  查看index5.mjs
  // await fetchDataFromApi();
  async function init() {
    await fetchDataFromApi();
    console.log('Finished fetching data');
  }
  
  init();
